SQlite源码分析

删除和重新加载从数据库表pTab的内部模式

6.1 函数头

static void reloadTableSchema(Parse pParse, Table pTab, const char *zName)

生成代码删除和重新加载从数据库表pTab的内部模式,包括触发器和临时触发器。

参数zName在数据库模式中的表的名称生成的代码执行。这可以不同于pTab - > zName如果这个函数被调用的代码的一部分“ALTER TABLE RENAME TO”声明。

6.2 工作流程

(1)判断如果v==0从不会发生,则返回0;

(2)如果当前线程保持了与数据库连接的互斥量和所有必须的BtShared的互斥量,函数返回true,该函数只用于assert()函数内部。赋值索引数据库模式。

(3)循环判断触发器列表,赋值触发器索引数据库模式,删除所有的触发器的内部模式

(4)删除内部模式中的表和索引,之后加载表、索引和不变的触发器模式,返回zWhere

(5)如果表没有在临时数据库中在存储,那么重载所有的临时触发器,返回zWhere